//
//  stringTools.c
//  BatailleNavaleRoyale
//
//  Created by Amer Nasser on 14/11/12.
//  


#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "stringTools.h"

//Cherche le nombre d'occurence d'un caractère dans une chaine 
// exemple PLAYERS/AMER/TISSA/

int countChars( char* s, char c )
{
    return *s == '\0'
    ? 0
    : countChars( s + 1, c ) + (*s == c);
}


//Decompose le tableau en chaine de caractere suivant un motif
//Envoie un tableau de chaines de caractères 
//Exemple splitString("Salut/amer/olivier/",'/');
//  renvoie un tableau de chaine qui contient "Salut" "amer" "olivier"
char** splitString (char * string,char motif){
    
    int nbphrase=countChars(string, motif);
    int i=0;
    
    char ** mots=malloc(nbphrase * sizeof(char*));
    
    int * taillesdesmots=sizeofWords(string, motif);
    
    for(i=0;i<nbphrase;i++){
        (mots[i])=malloc(sizeof(char) * taillesdesmots[i]);
    }
    int j,k;
    
    i=0;
    for(j=0;j<nbphrase;j++){
        for(k=0;k<taillesdesmots[j];k++){
            mots[j][k]=string[i];
            i++;
        }
        mots[j][k]='\0';
        
        i++;
    }
    
    return mots;
}

//retourne un tableau d'entier qui contient respectivement la taille de chaque
//mot par rappot a un caractere 
//
int * sizeofWords(char *string,char car){
    int nbphrase = countChars(string, car);
    int i;
    
    int *resultat = malloc(nbphrase * sizeof(int));
    
    int compteur=0,cara=0;
    
    for(i=0;i<nbphrase;i++){
        char c=string[cara];
        while(c != car){
            compteur ++;
            cara++;
            c=string[cara];
            
        }
        resultat[i]=compteur;
        compteur=0;
        cara++;
        
    }
    
    return resultat;
}


//retourne la taille d'une chaine de caractere 
int sizeofString(char *string){
    int i;
    for(i=0;string[i]!='\0';i++){}
    
    return i;
    
}
